#include "friendrequestwidget.h"
#include "ui_friendrequestwidget.h"
#include "friendrequestitemwidget.h"
#include <QJsonObject>

FriendRequestWidget::FriendRequestWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::FriendRequestWidget)
{
    ui->setupUi(this);
    this->setWindowTitle("新的朋友");
    this->resize(800,450);
}

FriendRequestWidget::~FriendRequestWidget()
{
    delete ui;
}


void FriendRequestWidget::addRequest(const QJsonObject &requestData)
{
    // 1. 解析来自服务器的通知数据
    int fromId = requestData["from_id"].toInt();
    QString fromUsername = requestData["from_username"].toString();
    QString message = requestData["message"].toString();

    // 2. 创建我们自定义的 FriendRequestItemWidget
    FriendRequestItemWidget* itemWidget = new FriendRequestItemWidget(ui->requestListWidget);
    itemWidget->setRequestInfo(fromId, fromUsername, message);

    // 3. 创建一个 QListWidgetItem 作为容器
    QListWidgetItem* container = new QListWidgetItem(ui->requestListWidget);
    container->setSizeHint(itemWidget->sizeHint()); // 让容器适应内容的大小

    // 4. 将容器添加到列表，并将我们的自定义 widget 设置进去
    ui->requestListWidget->addItem(container);
    ui->requestListWidget->setItemWidget(container, itemWidget);

    // 5. 关键连接：将 itemWidget 的信号连接到 FriendRequestWidget 的信号
    connect(itemWidget, &FriendRequestItemWidget::accepted, this, [=](int reqId){
        // 当"同意"信号发出时，我们再发出自己的"已响应"信号
        emit this->requestResponded(reqId, true);
        // 处理完后，从列表移除这一项
        delete container;
    });

    connect(itemWidget, &FriendRequestItemWidget::rejected, this, [=](int reqId){
        // 当"拒绝"信号发出时，也发出自己的"已响应"信号
        emit this->requestResponded(reqId, false);
        // 处理完后，也从列表移除这一项
        delete container;
    });

    return ;
}
